home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / sml_nj / 93src.lha / src / lex / ml.lex.sml < prev    next >
Encoding:
Text File  |  1993-01-27  |  38.9 KB  |  867 lines

  1. functor MLLexFun(structure Tokens : ML_TOKENS)=
  2.    struct
  3.     structure UserDeclarations =
  4.       struct
  5. (* Copyright 1989 by AT&T Bell Laboratories *)
  6.  
  7. open ErrorMsg;
  8.  
  9. structure TokTable = TokenTable(Tokens);
  10. type svalue = Tokens.svalue
  11. type pos = int
  12. type lexresult = (svalue,pos) Tokens.token
  13. type lexarg = {comLevel : int ref, 
  14.            lineNum : int ref,
  15.                linePos : int list ref, (* offsets of lines in file *)
  16.            charlist : string list ref,
  17.            stringstart : int ref, (* start of current string or comment*)
  18.                brack_stack : int ref list ref, (* for frags *)
  19.            err : pos*pos -> ErrorMsg.complainer}
  20. type arg = lexarg
  21. type ('a,'b) token = ('a,'b) Tokens.token
  22. val eof = fn ({comLevel,err,linePos,stringstart,
  23.                lineNum,charlist, brack_stack}:lexarg) => 
  24.        let val pos = Integer.max(!stringstart+2, hd(!linePos))
  25.         in if !comLevel>0 then err (!stringstart,pos) COMPLAIN
  26.                      "unclosed comment" nullErrorBody
  27.                     else ();
  28.            Tokens.EOF(pos,pos)
  29.        end    
  30. fun addString (charlist,s:string) = charlist := s :: (!charlist)
  31. fun makeString charlist = (implode(rev(!charlist)) before charlist := nil)
  32. fun makeHexInt sign s = let
  33.       fun digit d = if (d < Ascii.uc_a) then (d - Ascii.zero)
  34.         else (10 + (if (d < Ascii.lc_a) then (d - Ascii.uc_a) else (d - Ascii.lc_a)))
  35.       in
  36.     revfold (fn (c,a) => sign(a*16, digit(ord c))) (explode s) 0
  37.       end
  38. fun makeInt sign s =
  39.     revfold (fn (c,a) => sign(a*10, ord c - Ascii.zero)) (explode s) 0
  40.  
  41. local
  42. val quote = ord "`"
  43. in
  44. fun has_quote s =
  45.    let fun loop i = (ordof(s,i) = quote orelse loop (i+1))
  46.                     handle Ord => false
  47.    in
  48.    loop 0
  49.    end
  50. end;
  51.    
  52. end (* end of user routines *)
  53. exception LexError (* raised if illegal leaf action tried *)
  54. structure Internal =
  55.     struct
  56.  
  57. datatype yyfinstate = N of int
  58. type statedata = {fin : yyfinstate list, trans: string}
  59. (* transition & final state table *)
  60. val tab = let
  61. val s0 =
  62. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  63. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  64. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  65. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  66. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  67. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  68. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  69. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  70. \\000"
  71. val s1 =
  72. "\014\014\014\014\014\014\014\014\014\063\065\014\063\014\014\014\
  73. \\014\014\014\014\014\014\014\014\014\014\014\014\014\014\014\014\
  74. \\063\031\062\060\031\031\031\055\053\052\050\031\049\031\046\031\
  75. \\042\040\040\040\040\040\040\040\040\040\031\039\031\031\031\031\
  76. \\031\033\033\033\033\033\033\033\033\033\033\033\033\033\033\033\
  77. \\033\033\033\033\033\033\033\033\033\033\033\038\031\037\031\036\
  78. \\035\033\033\033\033\033\033\033\033\033\033\033\033\033\033\033\
  79. \\033\033\033\033\033\033\033\033\033\033\033\032\031\030\015\014\
  80. \\013"
  81. val s3 =
  82. "\066\066\066\066\066\066\066\066\066\066\071\066\066\066\066\066\
  83. \\066\066\066\066\066\066\066\066\066\066\066\066\066\066\066\066\
  84. \\066\066\066\066\066\066\066\066\069\066\067\066\066\066\066\066\
  85. \\066\066\066\066\066\066\066\066\066\066\066\066\066\066\066\066\
  86. \\066\066\066\066\066\066\066\066\066\066\066\066\066\066\066\066\
  87. \\066\066\066\066\066\066\066\066\066\066\066\066\066\066\066\066\
  88. \\066\066\066\066\066\066\066\066\066\066\066\066\066\066\066\066\
  89. \\066\066\066\066\066\066\066\066\066\066\066\066\066\066\066\066\
  90. \\066"
  91. val s5 =
  92. "\072\072\072\072\072\072\072\072\072\072\086\072\072\072\072\072\
  93. \\072\072\072\072\072\072\072\072\072\072\072\072\072\072\072\072\
  94. \\072\072\085\072\072\072\072\072\072\072\072\072\072\072\072\072\
  95. \\072\072\072\072\072\072\072\072\072\072\072\072\072\072\072\072\
  96. \\072\072\072\072\072\072\072\072\072\072\072\072\072\072\072\072\
  97. \\072\072\072\072\072\072\072\072\072\072\072\072\073\072\072\072\
  98. \\072\072\072\072\072\072\072\072\072\072\072\072\072\072\072\072\
  99. \\072\072\072\072\072\072\072\072\072\072\072\072\072\072\072\072\
  100. \\072"
  101. val s7 =
  102. "\087\087\087\087\087\087\087\087\087\089\091\087\089\087\087\087\
  103. \\087\087\087\087\087\087\087\087\087\087\087\087\087\087\087\087\
  104. \\089\087\087\087\087\087\087\087\087\087\087\087\087\087\087\087\
  105. \\087\087\087\087\087\087\087\087\087\087\087\087\087\087\087\087\
  106. \\087\087\087\087\087\087\087\087\087\087\087\087\087\087\087\087\
  107. \\087\087\087\087\087\087\087\087\087\087\087\087\088\087\087\087\
  108. \\087\087\087\087\087\087\087\087\087\087\087\087\087\087\087\087\
  109. \\087\087\087\087\087\087\087\087\087\087\087\087\087\087\087\087\
  110. \\087"
  111. val s9 =
  112. "\092\092\092\092\092\092\092\092\092\092\095\092\092\092\092\092\
  113. \\092\092\092\092\092\092\092\092\092\092\092\092\092\092\092\092\
  114. \\092\092\092\092\092\092\092\092\092\092\092\092\092\092\092\092\
  115. \\092\092\092\092\092\092\092\092\092\092\092\092\092\092\092\092\
  116. \\092\092\092\092\092\092\092\092\092\092\092\092\092\092\092\092\
  117. \\092\092\092\092\092\092\092\092\092\092\092\092\092\092\094\092\
  118. \\093\092\092\092\092\092\092\092\092\092\092\092\092\092\092\092\
  119. \\092\092\092\092\092\092\092\092\092\092\092\092\092\092\092\092\
  120. \\092"
  121. val s11 =
  122. "\096\096\096\096\096\096\096\096\096\102\104\096\102\096\096\096\
  123. \\096\096\096\096\096\096\096\096\096\096\096\096\096\096\096\096\
  124. \\102\097\096\097\097\097\097\096\101\096\097\097\096\097\096\097\
  125. \\096\096\096\096\096\096\096\096\096\096\097\096\097\097\097\097\
  126. \\097\099\099\099\099\099\099\099\099\099\099\099\099\099\099\099\
  127. \\099\099\099\099\099\099\099\099\099\099\099\096\097\096\097\096\
  128. \\096\099\099\099\099\099\099\099\099\099\099\099\099\099\099\099\
  129. \\099\099\099\099\099\099\099\099\099\099\099\096\097\096\097\096\
  130. \\096"
  131. val s15 =
  132. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  133. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  134. \\000\016\000\016\016\016\016\000\000\000\016\016\000\016\000\016\
  135. \\027\018\018\018\018\018\018\018\018\018\016\000\016\016\016\016\
  136. \\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  137. \\000\000\000\000\000\000\000\000\000\000\000\000\016\000\016\000\
  138. \\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  139. \\000\000\000\000\000\000\000\000\000\000\000\000\016\000\016\000\
  140. \\000"
  141. val s16 =
  142. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  143. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  144. \\000\016\000\016\016\016\016\000\000\000\016\016\000\016\000\016\
  145. \\000\000\000\000\000\000\000\000\000\000\016\000\016\016\016\016\
  146. \\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  147. \\000\000\000\000\000\000\000\000\000\000\000\000\016\000\016\000\
  148. \\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  149. \\000\000\000\000\000\000\000\000\000\000\000\000\016\000\016\000\
  150. \\000"
  151. val s17 =
  152. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  153. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  154. \\000\017\000\017\017\017\017\000\000\000\017\017\000\017\000\017\
  155. \\000\000\000\000\000\000\000\000\000\000\017\000\017\017\017\017\
  156. \\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  157. \\000\000\000\000\000\000\000\000\000\000\000\000\017\000\017\000\
  158. \\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  159. \\000\000\000\000\000\000\000\000\000\000\000\000\017\000\017\000\
  160. \\000"
  161. val s18 =
  162. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  163. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  164. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\000\
  165. \\018\018\018\018\018\018\018\018\018\018\000\000\000\000\000\000\
  166. \\000\000\000\000\000\019\000\000\000\000\000\000\000\000\000\000\
  167. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  168. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  169. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  170. \\000"
  171. val s19 =
  172. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  173. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  174. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  175. \\021\021\021\021\021\021\021\021\021\021\000\000\000\000\000\000\
  176. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  177. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  178. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  179. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\
  180. \\000"
  181. val s20 =
  182. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  183. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  184. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  185. \\021\021\021\021\021\021\021\021\021\021\000\000\000\000\000\000\
  186. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  187. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  188. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  189. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  190. \\000"
  191. val s22 =
  192. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  193. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  194. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  195. \\023\023\023\023\023\023\023\023\023\023\000\000\000\000\000\000\
  196. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  197. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  198. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  199. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  200. \\000"
  201. val s23 =
  202. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  203. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  204. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  205. \\023\023\023\023\023\023\023\023\023\023\000\000\000\000\000\000\
  206. \\000\000\000\000\000\024\000\000\000\000\000\000\000\000\000\000\
  207. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  208. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  209. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  210. \\000"
  211. val s24 =
  212. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  213. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  214. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  215. \\026\026\026\026\026\026\026\026\026\026\000\000\000\000\000\000\
  216. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  217. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  218. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  219. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\025\000\
  220. \\000"
  221. val s25 =
  222. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  223. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  224. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  225. \\026\026\026\026\026\026\026\026\026\026\000\000\000\000\000\000\
  226. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  227. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  228. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  229. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  230. \\000"
  231. val s27 =
  232. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  233. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  234. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\000\
  235. \\018\018\018\018\018\018\018\018\018\018\000\000\000\000\000\000\
  236. \\000\000\000\000\000\019\000\000\000\000\000\000\000\000\000\000\
  237. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  238. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  239. \\000\000\000\000\000\000\000\000\028\000\000\000\000\000\000\000\
  240. \\000"
  241. val s28 =
  242. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  243. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  244. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  245. \\029\029\029\029\029\029\029\029\029\029\000\000\000\000\000\000\
  246. \\000\029\029\029\029\029\029\000\000\000\000\000\000\000\000\000\
  247. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  248. \\000\029\029\029\029\029\029\000\000\000\000\000\000\000\000\000\
  249. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  250. \\000"
  251. val s33 =
  252. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  253. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  254. \\000\000\000\000\000\000\000\034\000\000\000\000\000\000\000\000\
  255. \\034\034\034\034\034\034\034\034\034\034\000\000\000\000\000\000\
  256. \\000\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\
  257. \\034\034\034\034\034\034\034\034\034\034\034\000\000\000\000\034\
  258. \\000\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\
  259. \\034\034\034\034\034\034\034\034\034\034\034\000\000\000\000\000\
  260. \\000"
  261. val s40 =
  262. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  263. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  264. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\000\
  265. \\041\041\041\041\041\041\041\041\041\041\000\000\000\000\000\000\
  266. \\000\000\000\000\000\019\000\000\000\000\000\000\000\000\000\000\
  267. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  268. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  269. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  270. \\000"
  271. val s42 =
  272. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  273. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  274. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\000\
  275. \\045\045\045\045\045\045\045\045\045\045\000\000\000\000\000\000\
  276. \\000\000\000\000\000\019\000\000\000\000\000\000\000\000\000\000\
  277. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  278. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  279. \\000\000\000\000\000\000\000\000\043\000\000\000\000\000\000\000\
  280. \\000"
  281. val s43 =
  282. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  283. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  284. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  285. \\044\044\044\044\044\044\044\044\044\044\000\000\000\000\000\000\
  286. \\000\044\044\044\044\044\044\000\000\000\000\000\000\000\000\000\
  287. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  288. \\000\044\044\044\044\044\044\000\000\000\000\000\000\000\000\000\
  289. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  290. \\000"
  291. val s45 =
  292. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  293. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  294. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\000\
  295. \\045\045\045\045\045\045\045\045\045\045\000\000\000\000\000\000\
  296. \\000\000\000\000\000\019\000\000\000\000\000\000\000\000\000\000\
  297. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  298. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  299. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  300. \\000"
  301. val s46 =
  302. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  303. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  304. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\047\000\
  305. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  306. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  307. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  308. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  309. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  310. \\000"
  311. val s47 =
  312. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  313. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  314. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\048\000\
  315. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  316. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  317. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  318. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  319. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  320. \\000"
  321. val s50 =
  322. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  323. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  324. \\000\016\000\016\016\016\016\000\000\051\016\016\000\016\000\016\
  325. \\000\000\000\000\000\000\000\000\000\000\016\000\016\016\016\016\
  326. \\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  327. \\000\000\000\000\000\000\000\000\000\000\000\000\016\000\016\000\
  328. \\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  329. \\000\000\000\000\000\000\000\000\000\000\000\000\016\000\016\000\
  330. \\000"
  331. val s53 =
  332. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  333. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  334. \\000\000\000\000\000\000\000\000\000\000\054\000\000\000\000\000\
  335. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  336. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  337. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  338. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  339. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  340. \\000"
  341. val s55 =
  342. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  343. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  344. \\000\000\000\000\000\000\000\059\000\000\000\000\000\000\000\000\
  345. \\058\058\058\058\058\058\058\058\058\058\000\000\000\000\000\000\
  346. \\000\056\056\056\056\056\056\056\056\056\056\056\056\056\056\056\
  347. \\056\056\056\056\056\056\056\056\056\056\056\000\000\000\000\057\
  348. \\000\056\056\056\056\056\056\056\056\056\056\056\056\056\056\056\
  349. \\056\056\056\056\056\056\056\056\056\056\056\000\000\000\000\000\
  350. \\000"
  351. val s56 =
  352. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  353. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  354. \\000\000\000\000\000\000\000\056\000\000\000\000\000\000\000\000\
  355. \\056\056\056\056\056\056\056\056\056\056\000\000\000\000\000\000\
  356. \\000\056\056\056\056\056\056\056\056\056\056\056\056\056\056\056\
  357. \\056\056\056\056\056\056\056\056\056\056\056\000\000\000\000\056\
  358. \\000\056\056\056\056\056\056\056\056\056\056\056\056\056\056\056\
  359. \\056\056\056\056\056\056\056\056\056\056\056\000\000\000\000\000\
  360. \\000"
  361. val s57 =
  362. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  363. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  364. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  365. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  366. \\000\056\056\056\056\056\056\056\056\056\056\056\056\056\056\056\
  367. \\056\056\056\056\056\056\056\056\056\056\056\000\000\000\000\000\
  368. \\000\056\056\056\056\056\056\056\056\056\056\056\056\056\056\056\
  369. \\056\056\056\056\056\056\056\056\056\056\056\000\000\000\000\000\
  370. \\000"
  371. val s58 =
  372. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  373. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  374. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  375. \\058\058\058\058\058\058\058\058\058\058\000\000\000\000\000\000\
  376. \\000\056\056\056\056\056\056\056\056\056\056\056\056\056\056\056\
  377. \\056\056\056\056\056\056\056\056\056\056\056\000\000\000\000\000\
  378. \\000\056\056\056\056\056\056\056\056\056\056\056\056\056\056\056\
  379. \\056\056\056\056\056\056\056\056\056\056\056\000\000\000\000\000\
  380. \\000"
  381. val s59 =
  382. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  383. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  384. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  385. \\058\058\058\058\058\058\058\058\058\058\000\000\000\000\000\000\
  386. \\000\056\056\056\056\056\056\056\056\056\056\056\056\056\056\056\
  387. \\056\056\056\056\056\056\056\056\056\056\056\000\000\000\000\057\
  388. \\000\056\056\056\056\056\056\056\056\056\056\056\056\056\056\056\
  389. \\056\056\056\056\056\056\056\056\056\056\056\000\000\000\000\000\
  390. \\000"
  391. val s60 =
  392. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  393. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  394. \\000\016\000\016\016\016\016\000\000\000\016\016\000\016\000\016\
  395. \\000\000\000\000\000\000\000\000\000\000\016\000\016\016\016\016\
  396. \\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  397. \\000\000\000\000\000\000\000\000\000\000\000\061\016\000\016\000\
  398. \\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  399. \\000\000\000\000\000\000\000\000\000\000\000\000\016\000\016\000\
  400. \\000"
  401. val s63 =
  402. "\000\000\000\000\000\000\000\000\000\064\000\000\064\000\000\000\
  403. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  404. \\064\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  405. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  406. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  407. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  408. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  409. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  410. \\000"
  411. val s67 =
  412. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  413. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  414. \\000\000\000\000\000\000\000\000\000\068\000\000\000\000\000\000\
  415. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  416. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  417. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  418. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  419. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  420. \\000"
  421. val s69 =
  422. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  423. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  424. \\000\000\000\000\000\000\000\000\000\000\070\000\000\000\000\000\
  425. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  426. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  427. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  428. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  429. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  430. \\000"
  431. val s72 =
  432. "\072\072\072\072\072\072\072\072\072\072\000\072\072\072\072\072\
  433. \\072\072\072\072\072\072\072\072\072\072\072\072\072\072\072\072\
  434. \\072\072\000\072\072\072\072\072\072\072\072\072\072\072\072\072\
  435. \\072\072\072\072\072\072\072\072\072\072\072\072\072\072\072\072\
  436. \\072\072\072\072\072\072\072\072\072\072\072\072\072\072\072\072\
  437. \\072\072\072\072\072\072\072\072\072\072\072\072\000\072\072\072\
  438. \\072\072\072\072\072\072\072\072\072\072\072\072\072\072\072\072\
  439. \\072\072\072\072\072\072\072\072\072\072\072\072\072\072\072\072\
  440. \\072"
  441. val s73 =
  442. "\000\000\000\000\000\000\000\000\000\083\084\000\000\000\000\000\
  443. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  444. \\083\000\082\000\000\000\000\000\000\000\000\000\000\000\000\000\
  445. \\079\079\079\079\079\079\079\079\079\079\000\000\000\000\000\000\
  446. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  447. \\000\000\000\000\000\000\000\000\000\000\000\000\078\000\076\000\
  448. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\075\000\
  449. \\000\000\000\000\074\000\000\000\000\000\000\000\000\000\000\000\
  450. \\000"
  451. val s76 =
  452. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  453. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  454. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  455. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  456. \\077\077\077\077\077\077\077\077\077\077\077\077\077\077\077\077\
  457. \\077\077\077\077\077\077\077\077\077\077\077\077\077\077\077\077\
  458. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  459. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  460. \\000"
  461. val s79 =
  462. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  463. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  464. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  465. \\080\080\080\080\080\080\080\080\080\080\000\000\000\000\000\000\
  466. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  467. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  468. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  469. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  470. \\000"
  471. val s80 =
  472. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  473. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  474. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  475. \\081\081\081\081\081\081\081\081\081\081\000\000\000\000\000\000\
  476. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  477. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  478. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  479. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  480. \\000"
  481. val s89 =
  482. "\000\000\000\000\000\000\000\000\000\090\000\000\090\000\000\000\
  483. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  484. \\090\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  485. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  486. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  487. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  488. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  489. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  490. \\000"
  491. val s97 =
  492. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  493. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  494. \\000\098\000\098\098\098\098\000\000\000\098\098\000\098\000\098\
  495. \\000\000\000\000\000\000\000\000\000\000\098\000\098\098\098\098\
  496. \\098\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  497. \\000\000\000\000\000\000\000\000\000\000\000\000\098\000\098\000\
  498. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  499. \\000\000\000\000\000\000\000\000\000\000\000\000\098\000\098\000\
  500. \\000"
  501. val s99 =
  502. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  503. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  504. \\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\
  505. \\100\100\100\100\100\100\100\100\100\100\000\000\000\000\000\000\
  506. \\000\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\
  507. \\100\100\100\100\100\100\100\100\100\100\100\000\000\000\000\100\
  508. \\000\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\
  509. \\100\100\100\100\100\100\100\100\100\100\100\000\000\000\000\000\
  510. \\000"
  511. val s102 =
  512. "\000\000\000\000\000\000\000\000\000\103\000\000\103\000\000\000\
  513. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  514. \\103\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  515. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  516. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  517. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  518. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  519. \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
  520. \\000"
  521. in Vector.vector
  522. [{fin = [], trans = s0},
  523. {fin = [(N 2)], trans = s1},
  524. {fin = [(N 2)], trans = s1},
  525. {fin = [], trans = s3},
  526. {fin = [], trans = s3},
  527. {fin = [(N 131)], trans = s5},
  528. {fin = [(N 131)], trans = s5},
  529. {fin = [(N 142)], trans = s7},
  530. {fin = [(N 142)], trans = s7},
  531. {fin = [], trans = s9},
  532. {fin = [], trans = s9},
  533. {fin = [(N 182)], trans = s11},
  534. {fin = [(N 182)], trans = s11},
  535. {fin = [(N 113),(N 115)], trans = s0},
  536. {fin = [(N 115)], trans = s0},
  537. {fin = [(N 51),(N 60),(N 115)], trans = s15},
  538. {fin = [(N 51),(N 60)], trans = s16},
  539. {fin = [(N 51)], trans = s17},
  540. {fin = [(N 92)], trans = s18},
  541. {fin = [], trans = s19},
  542. {fin = [], trans = s20},
  543. {fin = [(N 82)], trans = s20},
  544. {fin = [], trans = s22},
  545. {fin = [(N 82)], trans = s23},
  546. {fin = [], trans = s24},
  547. {fin = [], trans = s25},
  548. {fin = [(N 82)], trans = s25},
  549. {fin = [(N 92)], trans = s27},
  550. {fin = [], trans = s28},
  551. {fin = [(N 103)], trans = s28},
  552. {fin = [(N 12),(N 115)], trans = s0},
  553. {fin = [(N 51),(N 60),(N 115)], trans = s16},
  554. {fin = [(N 10),(N 115)], trans = s0},
  555. {fin = [(N 42),(N 115)], trans = s33},
  556. {fin = [(N 42)], trans = s33},
  557. {fin = [(N 51),(N 62),(N 115)], trans = s17},
  558. {fin = [(N 6),(N 115)], trans = s0},
  559. {fin = [(N 19),(N 115)], trans = s0},
  560. {fin = [(N 14),(N 115)], trans = s0},
  561. {fin = [(N 21),(N 115)], trans = s0},
  562. {fin = [(N 85),(N 88),(N 115)], trans = s40},
  563. {fin = [(N 85),(N 88)], trans = s40},
  564. {fin = [(N 88),(N 115)], trans = s42},
  565. {fin = [], trans = s43},
  566. {fin = [(N 97)], trans = s43},
  567. {fin = [(N 88)], trans = s45},
  568. {fin = [(N 27),(N 115)], trans = s46},
  569. {fin = [], trans = s47},
  570. {fin = [(N 31)], trans = s0},
  571. {fin = [(N 8),(N 115)], trans = s0},
  572. {fin = [(N 51),(N 60),(N 115)], trans = s50},
  573. {fin = [(N 111)], trans = s0},
  574. {fin = [(N 25),(N 115)], trans = s0},
  575. {fin = [(N 23),(N 115)], trans = s53},
  576. {fin = [(N 108)], trans = s0},
  577. {fin = [(N 115)], trans = s55},
  578. {fin = [(N 39)], trans = s56},
  579. {fin = [], trans = s57},
  580. {fin = [], trans = s58},
  581. {fin = [], trans = s59},
  582. {fin = [(N 51),(N 60),(N 115)], trans = s60},
  583. {fin = [(N 17)], trans = s0},
  584. {fin = [(N 105),(N 115)], trans = s0},
  585. {fin = [(N 2),(N 115)], trans = s63},
  586. {fin = [(N 2)], trans = s63},
  587. {fin = [(N 4)], trans = s0},
  588. {fin = [(N 125)], trans = s0},
  589. {fin = [(N 125)], trans = s67},
  590. {fin = [(N 123)], trans = s0},
  591. {fin = [(N 125)], trans = s69},
  592. {fin = [(N 118)], trans = s0},
  593. {fin = [(N 120)], trans = s0},
  594. {fin = [(N 131)], trans = s72},
  595. {fin = [(N 169)], trans = s73},
  596. {fin = [(N 149)], trans = s0},
  597. {fin = [(N 152)], trans = s0},
  598. {fin = [], trans = s76},
  599. {fin = [(N 162)], trans = s0},
  600. {fin = [(N 155)], trans = s0},
  601. {fin = [], trans = s79},
  602. {fin = [], trans = s80},
  603. {fin = [(N 167)], trans = s0},
  604. {fin = [(N 158)], trans = s0},
  605. {fin = [(N 137)], trans = s0},
  606. {fin = [(N 134)], trans = s0},
  607. {fin = [(N 127)], trans = s0},
  608. {fin = [(N 129)], trans = s0},
  609. {fin = [(N 146)], trans = s0},
  610. {fin = [(N 144),(N 146)], trans = s0},
  611. {fin = [(N 142),(N 146)], trans = s89},
  612. {fin = [(N 142)], trans = s89},
  613. {fin = [(N 139)], trans = s0},
  614. {fin = [(N 177)], trans = s0},
  615. {fin = [(N 173),(N 177)], trans = s0},
  616. {fin = [(N 171),(N 177)], trans = s0},
  617. {fin = [(N 175)], trans = s0},
  618. {fin = [(N 198)], trans = s0},
  619. {fin = [(N 194),(N 198)], trans = s97},
  620. {fin = [(N 194)], trans = s97},
  621. {fin = [(N 185),(N 198)], trans = s99},
  622. {fin = [(N 185)], trans = s99},
  623. {fin = [(N 196),(N 198)], trans = s0},
  624. {fin = [(N 182),(N 198)], trans = s102},
  625. {fin = [(N 182)], trans = s102},
  626. {fin = [(N 179)], trans = s0}]
  627. end
  628. structure StartStates =
  629.     struct
  630.     datatype yystartstate = STARTSTATE of int
  631.  
  632. (* start state definitions *)
  633.  
  634. val A = STARTSTATE 3;
  635. val AQ = STARTSTATE 11;
  636. val F = STARTSTATE 7;
  637. val INITIAL = STARTSTATE 1;
  638. val Q = STARTSTATE 9;
  639. val S = STARTSTATE 5;
  640.  
  641. end
  642. type result = UserDeclarations.lexresult
  643.     exception LexerError (* raised if illegal leaf action tried *)
  644.     exception Reject    (* for implementing REJECT *)
  645. end
  646.  
  647. fun makeLexer yyinput = 
  648. let 
  649.     val yyb = ref "\n"         (* buffer *)
  650.     val yybl = ref 1        (*buffer length *)
  651.     val yybufpos = ref 1        (* location of next character to use *)
  652.     val yygone = ref 1        (* position in file of beginning of buffer *)
  653.     val yydone = ref false        (* eof found yet? *)
  654.     val yybegin = ref 1        (*Current 'start state' for lexer *)
  655.  
  656.     val YYBEGIN = fn (Internal.StartStates.STARTSTATE x) =>
  657.          yybegin := x
  658.  
  659.     val REJECT = fn () => raise Internal.Reject
  660.  
  661. fun lex (yyarg as ({comLevel,lineNum,err,linePos,charlist,stringstart,brack_stack})) =
  662. let fun continue() : Internal.result = 
  663.   let fun scan (s,AcceptingLeaves : Internal.yyfinstate list list,l,i0) =
  664.     let fun action (i,nil) = raise LexError
  665.     | action (i,nil::l) = action (i-1,l)
  666.     | action (i,(node::acts)::l) =
  667.         case node of
  668.             Internal.N yyk => 
  669.             (let val yytext = substring(!yyb,i0,i-i0)
  670.                  val yypos = i0+ !yygone
  671.             open UserDeclarations Internal.StartStates
  672.  in (yybufpos := i; case yyk of 
  673.  
  674.             (* Application actions *)
  675.  
  676.   10 => (Tokens.LBRACE(yypos,yypos+1))
  677. | 103 => (
  678.             Tokens.INT0(makeHexInt (op -) (substring(yytext, 3, size(yytext)-3))
  679.                 handle Overflow => (err (yypos,yypos+size yytext)
  680.                           COMPLAIN "integer too large"
  681.                           nullErrorBody;
  682.                         0),
  683.               yypos, yypos+size yytext))
  684. | 105 => (charlist := [""]; stringstart := yypos;
  685.             YYBEGIN S; continue())
  686. | 108 => (YYBEGIN A; stringstart := yypos; comLevel := 1; continue())
  687. | 111 => (err (yypos,yypos+1) COMPLAIN "unmatched close comment"
  688.                 nullErrorBody;
  689.             continue())
  690. | 113 => (err (yypos,yypos) COMPLAIN "non-Ascii character"
  691.                 nullErrorBody;
  692.             continue())
  693. | 115 => (err (yypos,yypos) COMPLAIN "illegal token" nullErrorBody;
  694.             continue())
  695. | 118 => (inc comLevel; continue())
  696. | 12 => (Tokens.RBRACE(yypos,yypos+1))
  697. | 120 => (inc lineNum; linePos := yypos :: !linePos; continue())
  698. | 123 => (dec comLevel; if !comLevel=0 then YYBEGIN INITIAL else (); continue())
  699. | 125 => (continue())
  700. | 127 => (YYBEGIN INITIAL; Tokens.STRING(makeString charlist,
  701.                 !stringstart,yypos+1))
  702. | 129 => (err (!stringstart,yypos) COMPLAIN "unclosed string"
  703.                 nullErrorBody;
  704.             inc lineNum; linePos := yypos :: !linePos;
  705.             YYBEGIN INITIAL; Tokens.STRING(makeString charlist,!stringstart,yypos))
  706. | 131 => (addString(charlist,yytext); continue())
  707. | 134 => (inc lineNum; linePos := yypos :: !linePos;
  708.             YYBEGIN F; continue())
  709. | 137 => (YYBEGIN F; continue())
  710. | 139 => (inc lineNum; linePos := yypos :: !linePos; continue())
  711. | 14 => (Tokens.LBRACKET(yypos,yypos+1))
  712. | 142 => (continue())
  713. | 144 => (YYBEGIN S; stringstart := yypos; continue())
  714. | 146 => (err (!stringstart,yypos) COMPLAIN "unclosed string"
  715.                 nullErrorBody; 
  716.             YYBEGIN INITIAL; Tokens.STRING(makeString charlist,!stringstart,yypos+1))
  717. | 149 => (addString(charlist,"\t"); continue())
  718. | 152 => (addString(charlist,"\n"); continue())
  719. | 155 => (addString(charlist,"\\"); continue())
  720. | 158 => (addString(charlist,chr(Ascii.dquote)); continue())
  721. | 162 => (addString(charlist,chr(ordof(yytext,2)-ord("@"))); continue())
  722. | 167 => (let val x = ordof(yytext,1)*100
  723.          +ordof(yytext,2)*10
  724.          +ordof(yytext,3)
  725.          -(Ascii.zero*111)
  726.   in (if x>255
  727.       then err (yypos,yypos+4) COMPLAIN "illegal ascii escape" nullErrorBody
  728.       else addString(charlist,chr x);
  729.       continue())
  730.   end)
  731. | 169 => (err (yypos,yypos+1) COMPLAIN "illegal string escape"
  732.                 nullErrorBody; 
  733.             continue())
  734. | 17 => (Tokens.VECTORSTART(yypos,yypos+1))
  735. | 171 => (YYBEGIN AQ;
  736.                     let val x = makeString charlist
  737.                     in
  738.                     Tokens.OBJL(x,yypos,yypos+(size x))
  739.                     end)
  740. | 173 => ((* a closing quote *)
  741.                     YYBEGIN INITIAL;
  742.                     let val x = makeString charlist
  743.                     in
  744.                     Tokens.ENDQ(x,yypos,yypos+(size x))
  745.                     end)
  746. | 175 => (inc lineNum; addString(charlist,"\n"); continue())
  747. | 177 => (addString(charlist,yytext); continue())
  748. | 179 => (inc lineNum; continue())
  749. | 182 => (continue())
  750. | 185 => (YYBEGIN Q; 
  751.                     let val hash = StrgHash.hashString yytext
  752.                     in
  753.                     Tokens.AQID(FastSymbol.rawSymbol(hash,yytext),
  754.                 yypos,yypos+(size yytext))
  755.                     end)
  756. | 19 => (Tokens.RBRACKET(yypos,yypos+1))
  757. | 194 => (YYBEGIN Q; 
  758.                     let val hash = StrgHash.hashString yytext
  759.                     in
  760.                     Tokens.AQID(FastSymbol.rawSymbol(hash,yytext),
  761.                 yypos,yypos+(size yytext))
  762.                     end)
  763. | 196 => (YYBEGIN INITIAL;
  764.                     brack_stack := ((ref 1)::(!brack_stack));
  765.                     Tokens.LPAREN(yypos,yypos+1))
  766. | 198 => (err (yypos,yypos+1) COMPLAIN
  767.                ("ml lexer: bad character after antiquote "^yytext)
  768.                nullErrorBody;
  769.                     Tokens.AQID(FastSymbol.rawSymbol(0,""),yypos,yypos))
  770. | 2 => (continue())
  771. | 21 => (Tokens.SEMICOLON(yypos,yypos+1))
  772. | 23 => (if (null(!brack_stack))
  773.                     then ()
  774.                     else inc (hd (!brack_stack));
  775.                     Tokens.LPAREN(yypos,yypos+1))
  776. | 25 => (if (null(!brack_stack))
  777.                     then ()
  778.                     else if (!(hd (!brack_stack)) = 1)
  779.                          then ( brack_stack := tl (!brack_stack);
  780.                                 charlist := [];
  781.                                 YYBEGIN Q)
  782.                          else dec (hd (!brack_stack));
  783.                     Tokens.RPAREN(yypos,yypos+1))
  784. | 27 => (Tokens.DOT(yypos,yypos+1))
  785. | 31 => (Tokens.DOTDOTDOT(yypos,yypos+3))
  786. | 39 => (TokTable.checkTyvar(yytext,yypos))
  787. | 4 => (inc lineNum; linePos := yypos :: !linePos; continue())
  788. | 42 => (TokTable.checkToken(yytext,yypos))
  789. | 51 => (if (!System.Control.quotation)
  790.                             then if (has_quote yytext)
  791.                                  then REJECT()
  792.                                  else TokTable.checkToken(yytext,yypos)
  793.                             else TokTable.checkToken(yytext,yypos))
  794. | 6 => (Tokens.WILD(yypos,yypos+1))
  795. | 60 => (TokTable.checkToken(yytext,yypos))
  796. | 62 => (if (!System.Control.quotation)
  797.                             then (YYBEGIN Q;
  798.                                   charlist := [];
  799.                                   Tokens.BEGINQ(yypos,yypos+1))
  800.                             else (err(yypos, yypos+1)
  801.                                      COMPLAIN "quotation implementation error"
  802.                      nullErrorBody;
  803.                                   Tokens.BEGINQ(yypos,yypos+1)))
  804. | 8 => (Tokens.COMMA(yypos,yypos+1))
  805. | 82 => (Tokens.REAL(yytext,yypos,yypos+size yytext))
  806. | 85 => (Tokens.INT(makeInt (op +) yytext
  807.             handle Overflow => (err (yypos,yypos+size yytext)
  808.                       COMPLAIN "integer too large"
  809.                       nullErrorBody;
  810.                         1),
  811.             yypos,yypos+size yytext))
  812. | 88 => (Tokens.INT0(makeInt (op +) yytext
  813.             handle Overflow => (err (yypos,yypos+size yytext)
  814.                       COMPLAIN "integer too large"
  815.                       nullErrorBody; 0),
  816.             yypos,yypos+size yytext))
  817. | 92 => (Tokens.INT0(makeInt (op -)
  818.                     (substring(yytext,1,size(yytext)-1))
  819.             handle Overflow => (err (yypos,yypos+size yytext)
  820.                      COMPLAIN "integer too large"
  821.                      nullErrorBody;
  822.                         0),
  823.             yypos,yypos+size yytext))
  824. | 97 => (
  825.             Tokens.INT0(makeHexInt (op +) (substring(yytext, 2, size(yytext)-2))
  826.                 handle Overflow => (err (yypos,yypos+size yytext)
  827.                           COMPLAIN "integer too large"
  828.                           nullErrorBody;
  829.                         0),
  830.               yypos, yypos+size yytext))
  831. | _ => raise Internal.LexerError
  832.  
  833.         ) end handle Internal.Reject => action(i,acts::l))
  834.  
  835.     val {fin,trans} = Vector.sub(Internal.tab, s)
  836.     val NewAcceptingLeaves = fin::AcceptingLeaves
  837.     in if l = !yybl then
  838.          if trans = #trans(Vector.sub(Internal.tab,0))
  839.            then action(l,NewAcceptingLeaves
  840. ) else        let val newchars= if !yydone then "" else yyinput 1024
  841.         in if (size newchars)=0
  842.           then (yydone := true;
  843.                 if (l=i0) then UserDeclarations.eof yyarg
  844.                           else action(l,NewAcceptingLeaves))
  845.           else (if i0=l then yyb := newchars
  846.              else yyb := substring(!yyb,i0,l-i0)^newchars;
  847.              yygone := !yygone+i0;
  848.              yybl := size (!yyb);
  849.              scan (s,AcceptingLeaves,l-i0,0))
  850.         end
  851.       else let val NewChar = ordof(!yyb,l)
  852.         val NewState = if NewChar<128 then ordof(trans,NewChar) else ordof(trans,128)
  853.         in if NewState=0 then action(l,NewAcceptingLeaves)
  854.         else scan(NewState,NewAcceptingLeaves,l+1,i0)
  855.     end
  856.     end
  857. (*
  858.     val start= if substring(!yyb,!yybufpos-1,1)="\n"
  859. then !yybegin+1 else !yybegin
  860. *)
  861.     in scan(!yybegin (* start *),nil,!yybufpos,!yybufpos)
  862.     end
  863. in continue end
  864.   in lex
  865.   end
  866. end
  867.